package cn.iocoder.yudao.module.system.service.gugu;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.gugu.gugu.QsRankingInfo;
import cn.iocoder.yudao.module.system.controller.admin.gugu.vo.QsRankingPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.gugu.QsRankingDO;

import java.util.List;
import java.util.Map;

/**
 * 全球QS世界大学排名数据 Service 接口
 */
public interface QsRankingService {

    /**
     * 保存QS排名数据
     *
     * @param qsRankingList QS排名数据列表
     * @return 保存成功的数量
     */
    int saveQsRankingList(List<QsRankingInfo> qsRankingList);

    /**
     * 根据大学名称查询QS排名数据
     *
     * @param universityName 大学名称
     * @return QS排名数据列表
     */
    List<QsRankingDO> getQsRankingByUniversityName(String universityName);

    /**
     * 根据国家查询QS排名数据
     *
     * @param country 国家
     * @return QS排名数据列表
     */
    List<QsRankingDO> getQsRankingByCountry(String country);

    /**
     * 根据地区查询QS排名数据
     *
     * @param region 地区
     * @return QS排名数据列表
     */
    List<QsRankingDO> getQsRankingByRegion(String region);

    /**
     * 根据排名范围查询QS排名数据
     *
     * @param minRank 最小排名
     * @param maxRank 最大排名
     * @return QS排名数据列表
     */
    List<QsRankingDO> getQsRankingByRankRange(Integer minRank, Integer maxRank);

    /**
     * 根据大学唯一标识查询QS排名数据
     *
     * @param universityId 大学唯一标识
     * @return QS排名数据
     */
    QsRankingDO getQsRankingByUniversityId(String universityId);

    /**
     * 分页查询QS排名数据
     *
     * @param reqVO 查询条件
     * @return 分页结果
     */
    PageResult<QsRankingDO> getQsRankingPage(QsRankingPageReqVO reqVO);

    /**
     * 检查指定大学唯一标识的数据是否已存在
     *
     * @param universityId 大学唯一标识
     * @return 是否存在
     */
    boolean existsQsRanking(String universityId);

    /**
     * 从API获取QS排名数据并保存到数据库
     *
     * @param appkey API密钥
     * @param name 学校名称
     * @param pageindex 页码
     * @param pagesize 每页大小
     * @return 获取结果
     */
    Map<String, Object> fetchAndSaveQsRanking(String appkey, String name, Integer pageindex, Integer pagesize);

    /**
     * 根据大学唯一标识删除数据
     *
     * @param universityId 大学唯一标识
     * @return 删除的记录数
     */
    int deleteQsRankingByUniversityId(String universityId);

    /**
     * 获取排名前N的大学
     *
     * @param topN 前N名
     * @return QS排名数据列表
     */
    List<QsRankingDO> getTopNUniversities(Integer topN);

    /**
     * 获取中国大学的QS排名数据
     *
     * @return QS排名数据列表
     */
    List<QsRankingDO> getChineseUniversities();

    /**
     * 创建QS排名数据
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createQsRanking(QsRankingDO createReqVO);

    /**
     * 更新QS排名数据
     *
     * @param updateReqVO 更新信息
     */
    void updateQsRanking(QsRankingDO updateReqVO);

    /**
     * 删除QS排名数据
     *
     * @param id 编号
     */
    void deleteQsRanking(Long id);

    /**
     * 获得QS排名数据
     *
     * @param id 编号
     * @return QS排名数据
     */
    QsRankingDO getQsRanking(Long id);
}
